home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 15 / CU Amiga Magazine's Super CD-ROM 15 (1997)(EMAP Images)(GB)[!][issue 1997-10].iso / CUCD / Utilities / Post / Source / Gadgets.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-03-22  |  3.5 KB  |  181 lines

  1. #include "PostPre.h"
  2. #include "PostWin.h"
  3. #include "Global.h"
  4.  
  5. void    do_blit(void)
  6. {
  7.     blit_to_window = FALSE;
  8.     while(!AttemptLockLayerRom(OutputWnd->WLayer)) Delay(1);
  9.     BltBitMapRastPort(&bitmap, winxpos, winypos,
  10.                         OutputWnd->RPort, winxbase,
  11.                         winybase, winxsize, winysize, 0xC0);
  12.     WaitBlit();
  13.     UnlockLayerRom(OutputWnd->WLayer);
  14.     blit_to_window = TRUE;
  15. }
  16.  
  17. void    set_scrollers(void)
  18. {
  19.     UWORD    hidden, vertpot, vertbody, horizpot, horizbody;
  20.  
  21.     hidden = max(parm.page.xsize - winxsize, 0);
  22.     if(winxpos > hidden) winxpos = hidden;
  23.     if(hidden > 0)
  24.     {
  25.         horizbody = (UWORD) (((ULONG) winxsize * MAXBODY) / (parm.page.xsize));
  26.         horizpot = (UWORD) (((ULONG) winxpos * MAXBODY) / hidden);
  27.     }
  28.     else
  29.     {
  30.         horizbody = MAXBODY;
  31.         horizpot = 0;
  32.     }
  33.     hidden = max(parm.page.ysize - winysize, 0);
  34.     if(winypos > hidden) winypos = hidden;
  35.     if(hidden > 0)
  36.     {
  37.         vertbody = (UWORD) (((ULONG) winysize * MAXBODY) / (parm.page.ysize));
  38.         vertpot = (UWORD) (((ULONG) winypos * MAXBODY) / hidden);
  39.     }
  40.     else
  41.     {
  42.         vertbody = MAXBODY;
  43.         vertpot = 0;
  44.     }
  45.     NewModifyProp(&hscrollgadg, OutputWnd, NULL,
  46.         AUTOKNOB | FREEHORIZ | PROPNEWLOOK | PROPBORDERLESS,
  47.         horizpot, -1, horizbody, -1, 1);
  48.     NewModifyProp(&vscrollgadg, OutputWnd, NULL,
  49.         AUTOKNOB | FREEVERT | PROPNEWLOOK | PROPBORDERLESS,
  50.         -1, vertpot, -1, vertbody, 1);
  51. }
  52.  
  53. void    get_scrollers(void)
  54. {
  55.     UWORD    hidden;
  56.  
  57.     hidden = max(parm.page.xsize - winxsize, 0);
  58.     winxpos = (((ULONG) hidden * hscrollinfo.HorizPot) + (MAXPOT/2)) / MAXPOT;
  59.     hidden = max(parm.page.ysize  - winysize, 0);
  60.     winypos = (((ULONG) hidden * vscrollinfo.VertPot) + (MAXPOT/2)) / MAXPOT;
  61. }
  62.  
  63.  
  64.  
  65. void    do_gadgets(int gad_num, int incr)
  66. {
  67.     BOOL    blit = FALSE, change_scroller = TRUE;
  68.  
  69.     switch(gad_num)
  70.     {
  71.         case HORIZ_SCROLLER:
  72.         case VERT_SCROLLER:
  73.             get_scrollers();
  74.             change_scroller = FALSE;
  75.             blit = TRUE;
  76.             break;
  77.  
  78.         case GAD_LEFT:
  79.             if(winxpos > 0)
  80.             {
  81.                 winxpos -= incr;
  82.                 if(winxpos < 0) winxpos = 0;
  83.                 blit = TRUE;
  84.             }
  85.             break;
  86.  
  87.         case GAD_RIGHT:
  88.             if(winxpos <  parm.page.xsize - winxsize)
  89.             {
  90.                 winxpos += incr;
  91.                 if(winxpos > parm.page.xsize - winxsize) winxpos = parm.page.xsize - winxsize;
  92.                 blit = TRUE;
  93.             }
  94.             break;
  95.  
  96.         case GAD_UP:
  97.             if(winypos > 0)
  98.             {
  99.                 winypos -= incr;
  100.                 if(winypos < 0) winypos = 0;
  101.                 blit = TRUE;
  102.             }
  103.             break;
  104.  
  105.         case GAD_DOWN:
  106.             if(winypos <  parm.page.ysize - winysize)
  107.             {
  108.                 winypos += incr;
  109.                 if(winypos > parm.page.ysize - winysize) winypos = parm.page.ysize - winysize;
  110.                 blit = TRUE;
  111.             }
  112.             break;
  113.  
  114.         default:
  115.             blit = FALSE;
  116.             change_scroller = FALSE;
  117.             break;
  118.     }
  119.     if(blit)
  120.     {
  121.         if(change_scroller) set_scrollers();
  122.         do_blit();
  123.     }
  124. }
  125.  
  126. int    nextpage(void)
  127. {
  128.     if(running && paused)
  129.     {
  130.         Signal((struct Task *) rendertask, 1L << pause_signal);
  131.         if(number_of_pages)
  132.         {
  133.             page_number++;
  134.             sendmenu(PSACTPAUSE, number_of_pages, page_number, 0, NULL, NULL);
  135.         }
  136.         return(0);
  137.     }
  138.     else return(STR_ID_PAUSED);
  139. }
  140.  
  141. int    previouspage(void)
  142. {
  143.     if(running && paused)
  144.     {
  145.         if(number_of_pages)
  146.         {
  147.             if(page_number > 1)
  148.             {
  149.                 page_number--;
  150.                 Signal((struct Task *) rendertask, 1L << pause_signal);
  151.                 sendmenu(PSACTPAUSE, number_of_pages, page_number, 0, NULL, NULL);
  152.                 return(0);
  153.             }
  154.             else
  155.             {
  156.                 return(STR_ID_PAGE_FIRST);
  157.             }
  158.         }
  159.         else
  160.         {
  161.             return(STR_ID_PSFILE);
  162.         }
  163.     }
  164.     else
  165.     {
  166.         return(STR_ID_PAUSED);
  167.     }
  168. }
  169.  
  170. int    gotopage(int next_page_number)
  171. {
  172.     if(page_number != next_page_number)
  173.     {
  174.         Signal((struct Task *) rendertask, 1L << pause_signal);
  175.         page_number = next_page_number;
  176.         sendmenu(PSACTPAUSE, number_of_pages, page_number, 0, NULL, NULL);
  177.         return(0);
  178.     }
  179.     else return(STR_ID_PAGE_OK);
  180. }
  181.